Progetto Big Data (SkLearn) - Unipa

Import

Data Load

Creazione dei dataset train e test

Per prima cosa, assegniamo alla variabile X i valori corrispondenti alla matrice delle feature, assegniamo alla variabile y il vettore delle classi da predire.

Dato che i valori di y non sono bilanciati, uno split semplice del dataset creerebbe due sottodataset con frequenze di valori diverse per le classi da predire:

Data questa dinamica, utilizziamo lo StratifiedShuffleSplit di scikit-learn che permette di ottenere dei subset mantenendo equilibrata la classe obiettivo.

PreProcessing e selezione delle feature

  1. Utilizzeremo StandardScaler per standardizzare le feature in modo da ottenere valori che abbiano media 0 e varianza 1.
  2. Utilizzeremo SelectFromModel per selezionare le feature maggiormente determinanti per la classificazione.
  3. Utilizzeremo RandomForestClassifier come classificatore per predire il valore di y.

SelectFromModel utilizza un classificatore e analizza come il classificatore attribuisce peso alle features ai fini della classificazione finale, una volta individuate le feature maggiormente rilevanti modifica la matrice originaria eliminando le colonne corrispondenti.

A seguito del training, è possibile osservare come i differenti step di preprocessing abbiano eseguito lo scaling e la selezione delle features.

Scaler:

NOTA: Questo serve per scalare in maniera omogenea anche i dati di test e quelli che il modello potrà incontrare in fase di inferenza. Infatti, se i dati di test e di inferenza non venissero scalati con la stessa media e varianza utilizzata in fase di training, i dati assumerebbero dei valori che potrebbero divenire incomprensibili per il modello allenato su distribuzioni differenti.

Feature Selector:

Il componente feature selector ha selezionato le feature più rilevanti per la determinazione del risultato finale (attraverso il calcolo di un indice di impurità basato sull'entropia dei nodi che utilizzano feature nell'albero decisionale). Al fine di agevolare questa fase, è stato utilizzato come base un modello ExtraTreesClassifier (alberi decisionali randomizzati).

Creazione della Pipeline di Classificazione

Una volta individuate le feature rilevanti, filtriamo il dataset in modo che contenga solo esse. Inoltre, verrà creata una nuova pipeline classifier che non contiene il selettore delle feature ma il solo classificatore finale (un modello Random Forest).

Eseguiremo quindi il fit della pipeline classifier con dei parametri rbitrari per il classificatore, in modo da osservarne i risultati.

Valutazione del Modello

Example Predictions:

Costruzione score:

Per un ulteriore livello di dettaglio, si riportano i valori di precision e recall f1_score per il modello di classificazione

Dato il forte sbilanciamento delle classi è necessario ponderare le stesse al fine di ottenere un f1_score che tenga questo effetto in conto

Ottimizzazione dei parametri della pipeline

In questa prima esecuzione i parametri del classificatore utilizzati nella pipeline sono stati forniti in maniera arbitraria. Al fine di recuperare la migliore configurazione possibile per il classificatore, è possibile utilizzare una modalità di auto-ML attraverso una ricerca iterativa incrociata dei parametri ottimali per il modello.

Come obiettivo dell'ottimizzatore è stata fornita una funzione che cerca di massimizzare l'AUC (Nel nostro caso, la funzione score_auc restituisce il valore 1-auc, da minimizzare).

Test del classificatore

 Visualizzazione Dati Classificati

Per motivi di performance nella visualizzazione selezioneremo soltanto i primi 5000 punti.

Facciamo un sampling per ottenere lo stesso numero di campioni per classe

Multi Dimensional Scaling:

T-distributed stochastic neighbor embedding:

Conclusioni

Attraverso la ricerca incrociata dei parametri del classificatore è stato possibile migliorare i risultati del modello riducendo l'AUC e l' f1-score.

Nel caso specifico del business case in oggetto, è possibile osservare come si sia ottenuta una precisione del 100% sui casi di frode, con una recall del 76%. Di contro, con una strategia di traning aggressiva sul bilanciamento delle classi, la precision